home *** CD-ROM | disk | FTP | other *** search
/ Professional Typography Expert 2 / Professional Typography Expert 2.iso / demos / tablecalc / !QuickRefs / c / QuickRefs < prev   
Encoding:
Text File  |  1994-12-17  |  3.0 KB  |  139 lines

  1. /* Quick reference card printer */
  2.  
  3. #include "kernel.h"
  4. #include <stdlib.h>
  5.  
  6. #include "DeskLib:Wimp.h"
  7. #include "DeskLib:WimpSWIs.h"
  8. #include "DeskLib:Event.h"
  9. #include "DeskLib:Template.h"
  10. #include "DeskLib:Window.h"
  11. #include "DeskLib:PDriver.h"
  12. #include "DeskLib:Resource.h"
  13. #include "DeskLib:Hourglass.h"
  14. #include "DeskLib:Handler.h"
  15. #include "DeskLib:File.h"
  16.  
  17. #define DrawFile_Render 0x45540
  18.  
  19. window_handle WHandle;
  20. void *DrawFile;
  21. int FileSize;
  22.  
  23. void QuickRefs_Initialise(void);
  24. BOOL QuickRefs_PrintButton(event_pollblock *,void *);
  25. BOOL QuickRefs_Close(event_pollblock *,void *);
  26.  
  27. int main()
  28. {
  29.   QuickRefs_Initialise();
  30.   
  31.   for(;;)
  32.     Event_Poll();
  33.     
  34.   return(0);
  35. }
  36.  
  37. void QuickRefs_Initialise(void)
  38. {
  39.   _kernel_swi_regs sr;
  40.   char name[]="<QuickRefs$Dir>.RefCard";
  41.   file_handle f;
  42.  
  43.   Resource_Initialise("QuickRefs");
  44.   Event_Initialise3("QuickRefs",310,0);
  45.   Template_Initialise();
  46.   Template_LoadFile("Templates");
  47.   
  48.   if(PDriver_PrinterName()==NULL)
  49.     Error_ReportFatal(123,"Configure a RISC OS printer driver before running !QuickRefs");
  50.   
  51.   WHandle=Window_CreateAndShow("quickrefs",0,open_WHEREVER);
  52.   Event_Claim(event_OPEN,WHandle,event_ANY,Handler_OpenWindow,0);
  53.   Event_Claim(event_CLICK,WHandle,0,QuickRefs_PrintButton,0);
  54.   Event_Claim(event_CLOSE,WHandle,event_ANY,QuickRefs_Close,0);
  55.   
  56.   sr.r[0]=5;
  57.   sr.r[1]=(int)name;
  58.   _kernel_swi(8,&sr,&sr);
  59.   FileSize=sr.r[4];
  60.   DrawFile=malloc(FileSize);
  61.   f=File_Open(name,file_READ);
  62.   File_ReadBytes(f,DrawFile,FileSize);
  63.   File_Close(f);
  64. }
  65.  
  66. BOOL QuickRefs_Close(event_pollblock *pb,void *ref)
  67. {
  68.   pb=pb; ref=ref;
  69.   
  70.   exit(0);
  71.   
  72.   return TRUE;
  73. }
  74.  
  75. BOOL QuickRefs_PrintButton(event_pollblock *pb,void *ref)
  76. {
  77.   file_handle PrintJob=File_Open("printer:",file_WRITE);
  78.   print_job OldJob;
  79.   wimp_rect printrect;
  80.   print_transformation pt;
  81.   wimp_point position;
  82.   BOOL more;
  83.   int id;
  84.   wimp_rect printable;
  85.   wimp_point psize;
  86.   _kernel_swi_regs sr;
  87.   
  88.   pb=pb; ref=ref;
  89.   
  90.   Hourglass_On();
  91.   
  92.   PDriver_SelectJob((print_job)PrintJob,"Quick referance card",&OldJob);
  93.   PDriver_PageSize(&psize,&printable);
  94.   
  95.   /*
  96.   
  97.   printrect.min.x=printable.min.x/400;
  98.   printrect.min.y=printable.min.y/400;
  99.   printrect.max.x=printable.max.x/400;
  100.   printrect.max.y=printable.max.y/400;    
  101.   
  102.   */
  103.   
  104.   printrect.min.x=0  /* printable.min.x/400 */;
  105.   printrect.min.y=0  /* printable.min.y/400 */;
  106.   printrect.max.x=(printable.max.x-printable.min.x)/400;
  107.   printrect.max.y=(printable.max.y-printable.min.y)/400;    
  108.   
  109.   pt.xx=1<<16;
  110.   pt.xy=0;
  111.   pt.yx=0;
  112.   pt.yy=1<<16;
  113.   
  114.   position.x= printable.min.x /* 0*72000 */;
  115.   position.y= printable.min.y /* 0*72000 */;            
  116.   
  117.   PDriver_GiveRectangle(1,&printrect,&pt,&position,0xffffff00);
  118.   
  119.   PDriver_DrawPage(1,&printrect,0,0,&more,&id);
  120.   more=abs(more);
  121.   while(more!=0) {
  122.     sr.r[0]=0;
  123.     sr.r[1]=(int)DrawFile;
  124.     sr.r[2]=FileSize;
  125.     sr.r[3]=0;
  126.     sr.r[4]=(int)(&printrect);
  127.     _kernel_swi(DrawFile_Render,&sr,&sr);
  128.     PDriver_GetRectangle(&printrect,&more,&id);
  129.     more=abs(more);
  130.   }  
  131.   
  132.   PDriver_EndJob((print_job)PrintJob);
  133.   File_Close(PrintJob);
  134.   
  135.   Hourglass_Off();
  136.   
  137.   return TRUE;
  138. }
  139.